<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
</body>
<script>
    // Promise实例的链式操作 => 原理Promise对象的then() catch() finally() 返回值都是Promise实例 => 后面可以继续接then方法()

    // Promise实例的链式操作
    //  1. Promise实例的then方法,不接受成功或失败的回调函数 => Promise实例的状态和存储的数据将继续向后传递

    // 成功的链式传递
   /*  var p = new Promise(function(resolve,reject){
        // 回调函数 -> 容器 -> 用来存放异步操作 (根据异步操作的结果改变状态)
        setTimeout(()=>{
            resolve(1); // {<fulfilled>:1}
            // reject(0)   // {<rejected>:0}
            console.log(p); 
        },2000);

    })
    console.log(p); // {<pending>:undefined}

    // p(pending)  => 2s (fulfilled)
    p.then().then().then().then().then(function(arg){
        console.log("fulfilled",arg);
    }) */

    /* 失败的链式传递 */
    /* var p = new Promise(function(resolve,reject){
        // 回调函数 -> 容器 -> 用来存放异步操作 (根据异步操作的结果改变状态)
        setTimeout(()=>{
            reject(0)   // {<rejected>:0}
            console.log(p); 
        },2000);

    })
    console.log(p); // {<pending>:undefined}

    // p(pending)  => 2s (rejected)
    // p.then().then().then().then().catch(function(arg){
    //     console.log("rejected",arg);
    // }) */


    var p = new Promise(function(resolve,reject){
        // 回调函数 -> 容器 -> 用来存放异步操作 (根据异步操作的结果改变状态)
        setTimeout(()=>{
            // resolve(1); // {<fulfilled>:1}
            reject(0)   // {<rejected>:0}
            console.log(p); 
        },2000);

    })
    console.log(p); // {<pending>:undefined}

    // p(pending)  => 2s (rejected)
    p.then().then().then().then().then(function(arg){
        console.log("fulfilled",arg);
    }).catch(function(arg){
        console.log("rejected",arg);
    })

</script>
</html>